﻿#include <iostream>

static void swap(int* numbers, const int index1, const int index2)
{
    if (index1 == index2) return;

    numbers[index1]=numbers[index1]^numbers[index2];
    numbers[index2]=numbers[index1]^numbers[index2];
    numbers[index1]=numbers[index1]^numbers[index2];
}

static void sort(int* numbers, const size_t size) {
    int lastIndex = size - 1;
    while (lastIndex > 0) {
        for (int i = 0; i < lastIndex; i++) {
            if (numbers[i] > numbers[i + 1]) {
                swap(numbers, i, i + 1);
            }
        }

        lastIndex--;
    }
}

/**
 * 冒泡排序 [9,0,1,2,3,8,7]
 * 9 > 0 交换 [0,9,1,2,3,8,7]
 * 9 > 1 交换 [0,1,9,2,3,8,7]
 * 9 > 2 交换 [0,1,2,9,3,8,7]
 * 9 > 3 交换 [0,1,2,3,9,8,7]
 * 9 > 8 交换 [0,1,2,3,8,9,7]
 * 9 > 7 交换 [0,1,2,3,8,7,9]
 * 这样，最后一个数字就是最大的，以此类推，倒数第二个数字的位置存第二大的数字，
 * 倒数第三个数字的位置存第三大的数字...
 */
int main_BubbleSort()
{
    int arr[] = {9, 100, 32, 50, 47, 81, 7, 1};
    size_t size = sizeof(arr)/sizeof(int);
    sort(arr, size);

    for (int i = 0; i < size; i++) {
        printf("arr[%d]=%d\n", i, arr[i]);
    }

    return 0;
}